const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();

// 存储验证码的临时对象（生产环境建议使用Redis）
const verificationCodes = new Map();

// 生成6位随机验证码
function generateVerificationCode() {
  return Math.floor(100000 + Math.random() * 900000).toString();
}

// 发送验证码（模拟）
router.post('/send-code', (req, res) => {
  console.log('收到发送验证码请求:', req.body);
  
  const { phone } = req.body;
  
  if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
    console.log('手机号格式错误:', phone);
    return res.status(400).json({ message: '手机号格式不正确' });
  }

  // 检查是否频繁发送（60秒内只能发送一次）
  const lastSendTime = verificationCodes.get(`${phone}_time`);
  if (lastSendTime && Date.now() - lastSendTime < 60000) {
    return res.status(429).json({ message: '请勿频繁发送验证码，请稍后再试' });
  }

  // 生成验证码
  const code = generateVerificationCode();
  
  // 模拟发送短信
  console.log(`📱 模拟发送短信验证码到 ${phone}: ${code}`);
  
  // 存储验证码（5分钟有效期）
  verificationCodes.set(phone, code);
  verificationCodes.set(`${phone}_time`, Date.now());
  
  // 5分钟后自动删除验证码
  setTimeout(() => {
    verificationCodes.delete(phone);
    verificationCodes.delete(`${phone}_time`);
    console.log(`验证码已过期并删除: ${phone}`);
  }, 5 * 60 * 1000);
  
  res.json({ 
    message: '验证码发送成功',
    // 开发环境下返回验证码，方便测试
    code: code 
  });
});

// 验证码登录
router.post('/login', (req, res) => {
  console.log('收到登录请求:', req.body);
  
  const { phone, code } = req.body;

  if (!phone || !code) {
    return res.status(400).json({ message: '手机号和验证码不能为空' });
  }

  // 验证验证码
  const storedCode = verificationCodes.get(phone);
  if (!storedCode || storedCode !== code) {
    console.log(`验证码验证失败 - 手机号: ${phone}, 输入: ${code}, 存储: ${storedCode}`);
    return res.status(400).json({ message: '验证码错误或已过期' });
  }

  // 验证成功后删除验证码
  verificationCodes.delete(phone);
  verificationCodes.delete(`${phone}_time`);
  console.log(`验证码验证成功，已删除: ${phone}`);

  // 查询用户是否存在
  const checkUser = 'SELECT * FROM users WHERE phone = ?';
  global.db.query(checkUser, [phone], (err, results) => {
    if (err) {
      console.error('数据库查询错误:', err);
      return res.status(500).json({ message: '数据库错误' });
    }

    let user;
    if (results.length === 0) {
      // 用户不存在，创建新用户
      const defaultUsername = `用户${phone.slice(-4)}`;
      const insertUser = 'INSERT INTO users (phone, username) VALUES (?, ?)';
      
      global.db.query(insertUser, [phone, defaultUsername], (err, result) => {
        if (err) {
          console.error('创建用户错误:', err);
          return res.status(500).json({ message: '创建用户失败' });
        }

        user = {
          id: result.insertId,
          phone: phone,
          username: defaultUsername
        };

        // 生成JWT token
        const token = jwt.sign(
          { userId: user.id, phone: user.phone },
          global.JWT_SECRET,
          { expiresIn: '7d' }
        );

        console.log('新用户登录成功:', user);
        res.json({
          message: '登录成功',
          token: token,
          user: user
        });
      });
    } else {
      // 用户已存在
      user = results[0];
      
      // 生成JWT token
      const token = jwt.sign(
        { userId: user.id, phone: user.phone },
        global.JWT_SECRET,
        { expiresIn: '7d' }
      );

      console.log('用户登录成功:', user);
      res.json({
        message: '登录成功',
        token: token,
        user: user
      });
    }
  });
});

module.exports = router;




